package bean;


import java.lang.reflect.Array;
import java.math.BigDecimal;

import lang.Date;

import org.springframework.util.StringUtils;

/**
 * <描述> 对象转化的工具类
 * 
 * @author 王永弟
 * @since 1.0
 * @copyright 广州从兴电子开发有限公司-电子渠道业务部
 * @initialize <实例化方法>
 * @date 2011-5-25
 * @log <重大修改日志，格式：YYYY-MM-DD 修改人 修改内容>
 */
public class ConvertUtils {
	/**
	 * <方法描述> 将String字符串值，转化为指定类型的对象
	 * 
	 * @param value
	 *            字符串值
	 * @param clazz
	 *            待转化的类型
	 * @return 指定类型的对象
	 */
	public static Object convert(String value, Class<?> clazz) {
		Object retValue = null;
		if (clazz != null && !String.class.equals(clazz)) {
			if (StringUtils.hasLength(value)) {
				if (Date.class.equals(clazz)) {
					retValue = Date.parse(value);
				} else if (DateTime.class.equals(clazz)) {
					retValue = DateTime.parse(value);
				} else if (Time.class.equals(clazz)) {
					retValue = Time.parse(value);
				} else if (Timestamp.class.equals(clazz)) {
					retValue = Timestamp.parse(value);
				} else if (Integer.class.equals(clazz) || int.class.equals(clazz)) {
					retValue = new Integer(value);
				} else if (Long.class.equals(clazz) || long.class.equals(clazz)) {
					retValue = new Long(value);
				} else if (BigDecimal.class.equals(clazz)) {
					retValue = new BigDecimal(value);
				} else if (Boolean.class.equals(clazz) || boolean.class.equals(clazz)) {
					if ("Y".equalsIgnoreCase(value) || "true".equalsIgnoreCase(value) || "1".equalsIgnoreCase(value)) {
						retValue = true;
					} else if ("N".equalsIgnoreCase(value) || "false".equalsIgnoreCase(value)
							|| "0".equalsIgnoreCase(value)) {
						retValue = false;
					}
				} else if (Short.class.equals(clazz) || short.class.equals(clazz)) {
					retValue = Short.parseShort(value);
				} else if (Double.class.equals(clazz) || double.class.equals(clazz)) {
					retValue = Double.parseDouble(value);
				} else if (Float.class.equals(clazz) || float.class.equals(clazz)) {
					retValue = Float.parseFloat(value);
				} else if (java.sql.Date.class.equals(clazz)) {
					retValue = java.sql.Date.valueOf(value);
				} else if (java.sql.Time.class.equals(clazz)) {
					retValue = java.sql.Time.valueOf(value);
				} else if (java.sql.Timestamp.class.equals(clazz)) {
					retValue = java.sql.Timestamp.valueOf(value);
				} else if (java.sql.Date.class.equals(clazz)) {
					retValue = java.sql.Date.valueOf(value);
				} else if (clazz.isArray()) {
					String[] temp = value.split(",");
					Class type = clazz.getComponentType();
					retValue = Array.newInstance(type, temp.length);
					for (int i = 0; i < temp.length; i++) {
						Array.set(retValue, i, convert(temp[i], type));
					}
				} else {
					retValue = value;
				}
			}
		} else {
			retValue = value;
		}
		return retValue;
	}
}
